"""
__new__() 方法
    使用 类名() 创建对象时，Python 解释器首先会调用 __new__() 方法为对象分配空间
    __new__() 方法是由 object 提供的内置静态方法，主要作用有两个：
        在内存中为对象分配空间
        返回对象的引用
    Python 解释器获得对象的引用后，将引用作为第一个参数，传递给 __init__() 方法
    ** 重写 __new__ 方法的代码非常固定
        重写 __new__ 方法一定要 return super().__new__(cls)，否则 Python 解释器得不到分配了空间的对象引用
            就不会调用对象的初始化方法
        ** 注意 __new__ 方法是一个静态方法，调用时需要主动传递 cls 参数
"""


class MusicPlayer(object):

    def __new__(cls, *args, **kwargs):
        # 1 创建对象时，new 方法会被自动调用
        print("创建对象，分配空间")

        # 2 一定要 return super().__new__(cls) 
        ## 否则 Python 解释器获取不到对象的引用
        return super().__new__(cls)

    def __init__(self):
        print("播放器初始化")


# 创建播放器对象
player = MusicPlayer()
print(player)
